package com.example.exceldemo.exception;

import com.example.exceldemo.constants.ErrorCode;

/**
 * 业务异常
 *
 * @author system
 */
public class BizException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    /**
     * 错误码
     */
    private String code;

    /**
     * 错误消息
     */
    private String message;

    /**
     * 使用默认业务错误码构造异常
     *
     * @param message 错误消息
     */
    public BizException(String message) {
        super(message);
        this.code = ErrorCode.BIZ_ERROR;
        this.message = message;
    }

    /**
     * 使用指定错误码构造异常
     *
     * @param code 错误码
     * @param message 错误消息
     */
    public BizException(String code, String message) {
        super(message);
        this.code = code;
        this.message = message;
    }

    /**
     * 使用指定错误码和原始异常构造异常
     *
     * @param code 错误码
     * @param message 错误消息
     * @param cause 原始异常
     */
    public BizException(String code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
        this.message = message;
    }
    
    /**
     * 使用默认业务错误码和原始异常构造异常
     *
     * @param message 错误消息
     * @param cause 原始异常
     */
    public BizException(String message, Throwable cause) {
        super(message, cause);
        this.code = ErrorCode.BIZ_ERROR;
        this.message = message;
    }
    
    /**
     * 文件上传异常
     *
     * @param message 错误消息
     * @return 业务异常
     */
    public static BizException fileUploadError(String message) {
        return new BizException(ErrorCode.FILE_UPLOAD_ERROR, message);
    }
    
    /**
     * 文件解析异常
     *
     * @param message 错误消息
     * @return 业务异常
     */
    public static BizException fileParseError(String message) {
        return new BizException(ErrorCode.FILE_PARSE_ERROR, message);
    }
    
    /**
     * 文档生成异常
     *
     * @param message 错误消息
     * @return 业务异常
     */
    public static BizException docGenerateError(String message) {
        return new BizException(ErrorCode.DOC_GENERATE_ERROR, message);
    }
    
    /**
     * 配置错误异常
     *
     * @param message 错误消息
     * @return 业务异常
     */
    public static BizException configError(String message) {
        return new BizException(ErrorCode.CONFIG_ERROR, message);
    }
    
    /**
     * 参数错误异常
     *
     * @param message 错误消息
     * @return 业务异常
     */
    public static BizException paramError(String message) {
        return new BizException(ErrorCode.PARAM_ERROR, message);
    }

    /**
     * 系统错误异常
     *
     * @param message 错误消息
     * @return 业务异常
     */
    public static BizException systemError(String message) {
        return new BizException(ErrorCode.SYSTEM_ERROR, message);
    }

    /**
     * 获取错误码
     *
     * @return 错误码
     */
    public String getCode() {
        return code;
    }

    /**
     * 获取错误消息
     *
     * @return 错误消息
     */
    @Override
    public String getMessage() {
        return message;
    }
} 